package gui;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.awt.Choice;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JPanel;
import logic.BDManage;

/**
 * Clase JPanelRifa encargada de mostrar la lista de rifas generadas.
 * @author Victoria Fuenmayor y José Gabriel Rivera
 */
public class JPanelRifa extends JPanel{
    private Choice selectorRifa;
    private BDManage categorias;
    private GUI gui;
    private int nroRifas;

    /**
     * Recibe GUI y categoria del tipo BDManage.
     * Inicializa los componentes, crea una variable de tipo Choice.
     * Carga las rifas y sobreescribe el evento al seleccionar un item.
     * @param categorias
     * @param gui 
     */
    public JPanelRifa(BDManage categorias, GUI gui) {
        this.categorias = categorias;
        this.gui = gui;
        this.setLayout(new GridLayout(1,0));
        selectorRifa = new Choice();
        this.add(selectorRifa);
        this.CargarRifas(-1);
        selectorRifa.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                eventoRifa();
            }
        });
    }
    
    /**
     * Recibe el ID de la categoria.
     * Limpia la lista de categorias, en caso de que no existan rifas o este en la categoria nula retornará.
     * Realiza una iteración donde agrega los nombres de los items a la variable que almacena las rifas.
     * Cuenta el número de rifas creadas.
     * @param idCategoria 
     */
    public void CargarRifas(int idCategoria){
        selectorRifa.removeAll();
        selectorRifa.addItem("Rifas");
        if (idCategoria==-1 || ((logic.Categoria)this.categorias.getObject(idCategoria)).getRifas().getLength()==0){
           return;
        }
        
        for (int i=0; i<((logic.Categoria)this.categorias.getObject(idCategoria)).getRifas().getLength(); i++){ 
            if(((logic.Categoria)this.categorias.getObject(idCategoria)).getRifas().getObject(i)!=null){
                selectorRifa.addItem(((logic.Categoria)this.categorias.getObject(idCategoria)).getRifas().getObject(i).getNombre());
                this.nroRifas++;    
            }          
        }
    }
    
    /**
     * Al presionar alguno de los items del Choice,
     * Si la rifa existe setea los datos de la misma, carga los boletos y muestra los demás paneles.
     * En caso contrario oculta todos paneles y no setea la data ni carga los boletos.
     */
    public void eventoRifa(){
        int idRifa = getIdRifa(categorias.getObject(this.gui.getListaCat().getIdCat()).getId());
        if(idRifa!=-1){
            this.gui.getPanelInfoRifa().setData((logic.Rifa)((logic.Categoria)categorias.getObject(this.gui.getListaCat().getIdCat())).getRifas().getObject(idRifa));
            this.gui.getPanelBoletos().cargarBoleto(this.gui.getListaCat().getIdCat(), idRifa);
            this.gui.getPanelInfoRifa().setVisible(true);
            this.gui.getPanelBoletos().setVisible(true);
            this.gui.getBotonPagar().setVisible(true);
            this.gui.getjButtonComprar().setVisible(true);
            this.gui.getCopiarCliente().setVisible(true);
        }else{
            this.gui.getPanelInfoRifa().setVisible(false);
            this.gui.getPanelInfoCliente().setVisible(false);
            this.gui.getPanelBoletos().setVisible(false);
            this.gui.getBotonPagar().setVisible(false);
            this.gui.getjButtonComprar().setVisible(false);
            this.gui.getCopiarCliente().setVisible(false);
        }
    }
    
    /**
     * Retorna el número de rifas creadas.
     * @return numero de rifas (tipo entero)
     */
    public int getNroRifas(){
        return nroRifas;
    }
    
    /**
     * Recibe el ID de la categoria y retorna el ID de la rifa.
     * @param idCategoria
     * @return ID rifa (tipo entero)
     */
    public int getIdRifa(int idCategoria){
        if(selectorRifa.getSelectedItem().equals("Rifas")){
            return -1;
        }else{
            return ((logic.Categoria)gui.getCategoria().getObject(idCategoria)).getRifas().buscarObjeto(selectorRifa.getSelectedItem()).getId();
        }
    }
}
